#include <stdio.h>
#include <stdlib.h>
#include "list.h" // 请不要删除，否则检查不通过
//本题处理时关注LQ指针变化,以及栈中头结点数据域为空
//LQ为指向指针的指针,故为(*LQ)->next
bool init_queue(LinkQueue *LQ)
{   
    *LQ=(LinkQueue)malloc(sizeof(LinkQueueNode));
    if(*LQ==NULL){
        return false;
    }
	(*LQ)->next=(*LQ);
	return true;
}

bool enter_queue(LinkQueue *LQ, ElemType x)
{
	LinkQueue p=NULL;
	p=(LinkQueue)malloc(sizeof(LinkQueueNode));
	if(p==NULL){
	    return false;
	}
	p->data=x;
	p->next=(*LQ)->next;
	(*LQ)->next=p;
	*LQ=(*LQ)->next;
	return true;
}

bool leave_queue(LinkQueue *LQ, ElemType *x)
{   
    if((*LQ)->next==(*LQ)){//队列为空
        return false;
    }
    LinkQueue first=(*LQ)->next->next;//注意:(*LQ)->next为头结点,数据域为空
    (*LQ)->next->next=first->next;
    *x=first->data;
    if(first==(*LQ)){//此判断在只有两个结点时格外重要
        *LQ=(*LQ)->next;
    }
    free(first);
	return *x;
}
